package com.xique.park.service.biz.service;

import com.xique.common.core.web.domain.AjaxResult;
import com.xique.park.bean.domain.ParkGarage;
import com.xique.park.bean.domain.ParkLane;
import com.xique.park.bean.request.web.garageLaneDev.*;
import com.xique.park.bean.request.web.garageLaneDev.board.BoardInfoRequest;
import com.xique.park.bean.request.web.garageLaneDev.board.LedSetRequest;
import com.xique.park.bean.request.web.garageLaneDev.board.VoiceSetRequest;
import com.xique.park.bean.request.web.garageLaneDev.board.VoiceTestRequest;
import com.xique.park.bean.request.web.garageLaneDev.garage.AddGarageRequest;
import com.xique.park.bean.request.web.garageLaneDev.garage.DeleteGarageRequest;
import com.xique.park.bean.request.web.garageLaneDev.garage.EditGarageRequest;
import com.xique.park.bean.request.web.garageLaneDev.ipc.AddIpcRequest;
import com.xique.park.bean.request.web.garageLaneDev.ipc.DeleteIpcRequest;
import com.xique.park.bean.request.web.garageLaneDev.ipc.EditIpcRequest;
import com.xique.park.bean.request.web.garageLaneDev.lane.AddLaneRequest;
import com.xique.park.bean.request.web.garageLaneDev.lane.DeleteLaneRequest;
import com.xique.park.bean.request.web.garageLaneDev.lane.EditLaneRequest;
import com.xique.park.bean.request.web.garageLaneDev.subdev.AddSubDevRequest;
import com.xique.park.bean.request.web.garageLaneDev.subdev.DeleteSubDevRequest;
import com.xique.park.bean.request.web.garageLaneDev.subdev.EditSubDevRequest;

/**
 * 车库通道设备bizService
 *
 * @author xique
 */
public interface IParkGarageLaneDevBizService {

    /**
     * 查询树形列表
     *
     * @param request 请求参数
     * @return 树形列表结果
     */
    AjaxResult getTreeList(GarageLaneDevListRequest request);

    /**
     * 查询节点信息
     *
     * @param request 请求参数
     * @return 节点信息
     */
    AjaxResult getNodeInfo(GarageLaneDevNodeInfoRequest request);

    /* ------------------------------------- 车库相关方法 ------------------------------------- */

    /**
     * 获取车库页面的车辆管理类型列表
     *
     * @return 车辆管理类型列表
     */
    AjaxResult getMngTypeList();

    /**
     * 添加车库保存
     *
     * @param request 车库信息
     * @return 保存结果
     */
    AjaxResult addGarage(AddGarageRequest request);

    /**
     * 编辑车库保存
     *
     * @param request 车库信息
     * @return 编辑保存结果
     */
    AjaxResult editGarage(EditGarageRequest request);

    /**
     * 删除车库
     *
     * @param request 待删除车库信息
     * @return 删除结果
     */
    AjaxResult deleteGarage(DeleteGarageRequest request);

    /* ------------------------------------- 通道相关方法 ------------------------------------- */

    /**
     * 添加通道保存
     *
     * @param request 通道信息
     * @return 添加结果
     */
    AjaxResult addLane(AddLaneRequest request);

    /**
     * 编辑通道保存
     *
     * @param request 通道信息
     * @return 编辑保存结果
     */
    AjaxResult editLane(EditLaneRequest request);

    /**
     * 删除通道保存
     *
     * @param request 待删除通道信息
     * @return 删除结果
     */
    AjaxResult deleteLane(DeleteLaneRequest request);

    /**
     * 获取车场车库列表
     *
     * @param parkGarage 查询参数
     * @return 车场车库列表
     */
    AjaxResult getGarageList(ParkGarage parkGarage);

    /**
     * 获取通道二维码地址
     *
     * @param parkLane 通道信息
     * @return 通道二维码地址
     */
    String laneQrCode(ParkLane parkLane);

    /* ------------------------------------- 主相机相关方法 ------------------------------------- */

    /**
     * 添加主相机保存
     *
     * @param request 主相机信息
     * @return 保存结果
     */
    AjaxResult addIpc(AddIpcRequest request);

    /**
     * 编辑主相机保存
     *
     * @param request 主相机信息
     * @return 编辑保存结果
     */
    AjaxResult editIpc(EditIpcRequest request);

    /**
     * 删除主相机保存
     *
     * @param request 待删除主相机信息
     * @return 删除结果
     */
    AjaxResult deleteIpc(DeleteIpcRequest request);

    /* ------------------------------------- 附加设备相关方法 ------------------------------------- */

    /**
     * 添加附加设备
     *
     * @param request 附加设备信息
     * @return 保存结果
     */
    AjaxResult addSubDev(AddSubDevRequest request);

    /**
     * 编辑附加设备
     *
     * @param request 附加设备信息
     * @return 保存结果
     */
    AjaxResult editSubDev(EditSubDevRequest request);

    /**
     * 删除附加设备
     *
     * @param request 附加设备信息
     * @return 删除结果
     */
    AjaxResult deleteSubDev(DeleteSubDevRequest request);

    /* ------------------------------------- 显示屏语音相关方法 ------------------------------------- */

    /**
     * 显示屏信息回显
     *
     * @param request 控制板信息
     * @return 控制板信息
     */
    AjaxResult getLedConfig(BoardInfoRequest request);

    /**
     * 音量信息回显
     *
     * @param request 控制板信息
     * @return 音量信息
     */
    AjaxResult getVoiceConfig(BoardInfoRequest request);

    /**
     * 显示屏设置
     *
     * @param request 显示屏信息
     * @return 设置结果
     */
    AjaxResult setLed(LedSetRequest request);

    /**
     * 音量设置
     *
     * @param request 音量设置请求
     * @return 设置结果
     */
    AjaxResult setVoice(VoiceSetRequest request);

    /**
     * 音量测试
     *
     * @param request 音量测试请求
     * @return 测试结果
     */
    AjaxResult voiceTest(VoiceTestRequest request);

    /**
     * 获取通道二维码url
     *
     * @param request 请求参数
     * @return 通道二维码url
     */
    AjaxResult generateQrcode(DeleteLaneRequest request);


    /**
     * @author caogq
     * @description:  删除项目下的所有设备
     * @date: 2022/6/16 12:31
     * @Param [parkId]
     */
    AjaxResult deleteDevices(Long parkId);
}
